Loggest thine Stuff
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.3 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <script lang="ts" context="module">
  2. import type { Load } from "@sveltejs/kit/types/internal";
  3. import { sl3 } from "$lib/clients/sl3";
  4. import parseInterval, { datesOf } from "$lib/utils/timeinterval";
  5. import type Item from "$lib/models/item";
  6. import type { ItemFilter, ItemGroup } from "$lib/models/item";
  7. export const load: Load = async({ fetch, params, session, stuff }) => {
  8. const scopeId = parseInt(params.scope.split("-")[0]);
  9. const interval = parseInterval(params.interval, new Date());
  10. const filter = {
  11. createdTime: interval,
  12. acquiredTime: interval,
  13. scheduledDate: datesOf(interval),
  14. };
  15. const {items, groups} = await sl3(fetch, stuff.idToken).listItems(scopeId, filter, true, session.groupOptions);
  16. return {
  17. stuff: { title: "History" },
  18. props: {
  19. items, groups, filter,
  20. intervalString: params.interval,
  21. },
  22. };
  23. }
  24. </script>
  25. <script lang="ts">
  26. import { goto } from "$app/navigation";
  27. import { session } from "$app/stores";
  28. import { browser } from "$app/env";
  29. import Main from "$lib/components/layout/Main.svelte";
  30. import { getScopeContext } from "$lib/components/contexts/ScopeContext.svelte";
  31. import DeletionModal from "$lib/modals/DeletionModal.svelte";
  32. import ItemAcquireModal from "$lib/modals/ItemAcquireModal.svelte";
  33. import ItemCreateModal from "$lib/modals/ItemCreateModal.svelte";
  34. import HistorySelector from "$lib/components/common/HistorySelector.svelte";
  35. import ItemListContext from "$lib/components/contexts/ItemListContext.svelte";
  36. import HistoryGroupList from "$lib/components/history/HistoryGroupList.svelte";
  37. import ToggleIcon from "$lib/components/history/ToggleIcon.svelte";
  38. export let intervalString: string
  39. export let items: Item[]
  40. export let groups: ItemGroup[]
  41. export let filter: ItemFilter;
  42. const {lastHistoryRange} = getScopeContext();
  43. function changeInterval(e: Event) {
  44. const target = e.target as HTMLSelectElement;
  45. lastHistoryRange.set(target.value);
  46. goto(`./${target.value}`, {replaceState: true});
  47. }
  48. function triggerReload() {
  49. goto(`./${intervalString}`, {replaceState: true});
  50. }
  51. $: {
  52. if (browser) {
  53. if ($session.groupOptions == null) {
  54. try {
  55. $session.groupOptions = JSON.parse(localStorage.getItem("sl3.history.group_options")||"{}");
  56. triggerReload();
  57. } catch(_) {
  58. $session.groupOptions = {};
  59. }
  60. } else {
  61. localStorage.setItem("sl3.history.group_options", JSON.stringify($session.groupOptions));
  62. }
  63. }
  64. }
  65. </script>
  66. <ItemListContext filter={filter} groups={groups} items={items}>
  67. <Main big>
  68. <HistorySelector value={intervalString} on:change={changeInterval} >
  69. {#if $session.groupOptions != null}
  70. <ToggleIcon inverse name="lightbulb" bind:value={$session.groupOptions.hideCreated} on:click={triggerReload} />
  71. <ToggleIcon inverse name="check_slot" bind:value={$session.groupOptions.hideAcquired} on:click={triggerReload} />
  72. <ToggleIcon inverse name="calendar" bind:value={$session.groupOptions.hideScheduled} on:click={triggerReload} />
  73. {/if}
  74. </HistorySelector>
  75. <HistoryGroupList intervalString={intervalString} />
  76. </Main>
  77. <ItemCreateModal />
  78. <ItemAcquireModal />
  79. <DeletionModal />
  80. </ItemListContext>